home *** CD-ROM | disk | FTP | other *** search
/ Scene 96 / Scene 96 International Edition (Zyklop Software) (Disc 1) (1997).iso / intros / 64k / revolt / sources / 3engine.as3 next >
Text File  |  1996-01-25  |  31KB  |  1,575 lines

  1.  
  2.         ;CONST
  3.                 ile_gene=2 ;number of cycles dither proccy
  4.  
  5. ;gouraudIs=1
  6.  
  7. ; BIT-SORT
  8. ; CALCULATE-VERTEX-NORMALS
  9. ; SQRT
  10. ; MAKE simple LIGHT (not moved)
  11.  
  12. jumps
  13. .386p
  14. CODE32 SEGMENT PARA PUBLIC USE32
  15. ASSUME cs:CODE32, ds:CODE32
  16.  
  17.         include pmode.inc
  18.         include rotatem.ext
  19.  
  20.         widoczno₧ì    db 0 ;jak zero to sprawdzaì
  21.  
  22.         PUBLIC    widoczno₧ì
  23.         PUBLIC    drawFacesVE    
  24.         PUBLIC    drawFacesVCE    
  25.         EXTRN    bene        :BYTE
  26.         EXTRN    poin2d        :WORD
  27.         ;sortowanie bitowe
  28.         EXTRN    sumy_z        :DWORD
  29.         EXTRN    sort_adr    :DWORD
  30.         EXTRN    sort_prz    :DWORD
  31.         EXTRN    kolejno₧ì    :WORD
  32.         PUBLIC    max_n_of_faces
  33.         EXTRN    adr_faces    :DWORD
  34.         EXTRN    adr_points    :DWORD
  35.         EXTRN    adr_versor    :DWORD
  36.         EXTRN    adr_colors    :DWORD            ;11:20
  37.         EXTRN    number_f    :DWORD
  38.         EXTRN    number_p    :DWORD
  39.         EXTRN    adr_pixels    :DWORD
  40.         EXTRN    lightE        :WORD
  41.         PUBLIC    make_lightE
  42.         PUBLIC    _mem
  43.         PUBLIC    _sort
  44.         ;u₧rednione wersory normalne...
  45.         EXTRN    nor_to_faces    :WORD
  46.         EXTRN    wersory        :WORD
  47.         EXTRN    ilo₧ì_wer    :DWORD
  48.         PUBLIC    calc_nor
  49.         ;pierwiastek
  50.         PUBLIC    _sqrt
  51.         ;ºarówka :) making light
  52.         EXTRN    light        :BYTE
  53.         PUBLIC    make_light
  54.                 ;rysowanie
  55.         EXTRN    inc_xxx        :DWORD
  56.         EXTRN    inc_yyy        :DWORD
  57.         EXTRN    inc_zzz        :DWORD
  58.         EXTRN    versory:WORD
  59.                 PUBLIC  generate32env
  60.     ifDEF gouraudIs
  61.                 PUBLIC  drawFacesV
  62.         PUBLIC    drawFacesVC                ;11:25
  63.     ENDif
  64.         PUBLIC    copypoints
  65.         PUBLIC    rotatety
  66.         PUBLIC    rotatety2
  67.     ifDEF gouraudIs
  68.                 PUBLIC  gouraud
  69.     ENDIF
  70.         PUBLIC    text
  71.         EXTRN    draw_where    :DWORD
  72.         IRPC    roxi,<123>
  73.         EXTRN    gou_x&roxi    :DWORD
  74.         EXTRN    gou_y&roxi    :DWORD
  75.         EXTRN    gou_c&roxi    :BYTE
  76.         EXTRN    delta&roxi    :DWORD
  77.         EXTRN    dC&roxi        :DWORD
  78.         ENDM
  79.                 PUBLIC  zdelta
  80.                 PUBLIC  d_x
  81.                 PUBLIC  d_y
  82.  
  83.         ; a tu juº wewnætrzne>> 
  84.         sort_adres    dd    1638
  85.         max_n_of_faces    equ     2000
  86.         sort_drawers    equ    1096
  87.         sort_memory    equ    sort_drawers*4*16+1024
  88.         pan1        equ    0
  89.         pan2        equ    4
  90.         pan3        equ    8
  91.         pan4        equ    12
  92.         clipup        equ 0
  93.         clipdown    equ 199
  94.         clipleft    equ 0
  95.         clipright    equ 319    
  96.         ;clipy do texturowania
  97.         clipu        equ 0
  98.         clipd        equ 199
  99.         clipl        equ 0
  100.         clipr        equ 319
  101.         clipuu        dd clipu*320
  102.         clipdd        dd clipd*320
  103.         clipll        dd clipl
  104.         cliprr        dd clipr
  105.  
  106.         PUBLIC        first_vertex
  107.         PUBLIC        second_vertex
  108.         PUBLIC        third_vertex
  109.         IRPC        roxi,<123>
  110.         PUBLIC        x&roxi
  111.         PUBLIC        y&roxi
  112.         PUBLIC        xt&roxi
  113.         PUBLIC        yt&roxi
  114.         ENDM
  115.         
  116.     first_vertex:
  117.         x1e    dw 0
  118.         x1    dw 0
  119.         y1e    dw 0
  120.         y1    dw 0
  121.         xt1e    dw 0
  122.         xt1    dw 0
  123.         yt1e    dw 0
  124.         yt1    dw 0
  125.         
  126.     second_vertex:
  127.         x2e    dw 0
  128.         x2     dw 0
  129.         y2e    dw 0
  130.         y2    dw 0
  131.         xt2e    dw 0
  132.         xt2    dw 0
  133.         yt2e    dw 0
  134.         yt2    dw 0
  135.  
  136.     third_vertex:
  137.         x3e    dw 0
  138.         x3    dw 0
  139.         y3e    dw 0
  140.         y3    dw 0
  141.         xt3e    dw 0
  142.         xt3    dw 0
  143.         yt3e    dw 0
  144.         yt3    dw 0
  145.  
  146.         h    dd 0
  147.         w    dd 0
  148.         dxxx1    dd 0
  149.         dyyy1    dd 0
  150.         adr_l    dd offset left ;adres do lewej strony krawædzi
  151.         adr_r    dd offset right ;a tutaj do prawej
  152.         adr_1    dd 0
  153.         adr_2    dd 0
  154.         adr_3    dd 0
  155.         _liner    dd 0
  156.  
  157.  
  158. ;
  159. ; [ _MEM ] - allokuje pamiæì dla sortowania bitowego...
  160. ;
  161. _mem        PROC
  162.         mov    eax,sort_memory
  163.         call    _getHiMem
  164.         jnc     jmem
  165.         jmp    _exit
  166.     jmem:    mov    sort_adres,eax
  167.         lea    edi,sort_adr
  168.         REPT    16
  169.         stosd
  170.         add    eax,sort_drawers*4
  171.         ENDM
  172.         ret
  173. _mem        ENDP
  174.  
  175. ;
  176. ; [ _SORT ] - gÆówna procka sortujåca...
  177. ; inSide that:    suma zetów, sortowanie, kolejno₧ì...
  178. ; out         :     tablca [KOLEJNOÿò]
  179. ;
  180. _sort        PROC
  181.         mov    esi,adr_points
  182.         lea    edi,poin2d
  183.         mov    ecx,number_p
  184.         call    persp
  185.         sort_addding  equ 5000
  186.         mov    esi,adr_faces    
  187.         lea    edi,sumy_z
  188.         xor    ebx,ebx
  189.         mov    ecx,number_f    
  190.         shl    ecx,16
  191.         neg    ecx
  192.     @sdist:    movsx    eax, word ptr [esi]
  193.         mov    ebp,eax
  194.         shl    ebp,1
  195.         add    ebp,adr_points
  196.         mov    bx , word ptr [eax*4+ebp+4]
  197.         movsx    eax, word ptr [esi+2]
  198.         mov    ebp,eax
  199.         shl    ebp,1
  200.         add    ebp,adr_points
  201.         add    bx , word ptr [eax*4+ebp+4]
  202.         movsx    eax, word ptr [esi+4]
  203.         mov    ebp,eax
  204.         shl    ebp,1
  205.         add    ebp,adr_points
  206.         add    bx , word ptr [eax*4+ebp+4]
  207.         add    bx , sort_addding
  208.         mov    dword ptr [edi],ebx
  209.         add    edi,4                
  210.         add    esi,6
  211.         add    ebx,010000h
  212.         add    ecx,010000h
  213.         js    @sdist
  214.         ; a tu juº po sumowaniu zet'ów...
  215.         IRPC    katha,<123>
  216.         local    bsort,shift,sorwÆ,pddd,@next
  217.         mov    byte ptr [shift-1],pan&katha
  218.     bSort:    lea    edi,sort_prz
  219.         mov    ecx,16
  220.         xor    eax,eax
  221.         rep    stosd
  222.     ; sortowanie wÆa₧ciwe 
  223.         mov    esi,offset sumy_z
  224.         mov    ebp,offset sort_prz
  225.         mov    ecx,number_f
  226.     sorwÆ:    lodsd
  227.         mov     ebx,eax
  228.         shr    ebx,0fh
  229.     shift:    and    ebx,0fh
  230.         mov    edi,dword ptr sort_prz[ebx*4]        
  231.         inc    dword ptr sort_prz[ebx*4]    
  232.         mov    edx,dword ptr sort_adr[ebx*4]    
  233.         mov    [edx+edi*4],eax
  234.         loop     sorwÆ
  235.     ; make [kolejno₧ì] table 
  236.         mov    ebp,offset sort_prz
  237.         mov    edi,offset sumy_z
  238.         mov    esi,sort_adres
  239.         mov    ecx,16
  240.     pddd:    push    ecx esi
  241.         mov    edx,dword ptr [ebp]
  242.         or    edx,edx
  243.         jz    @next
  244.         mov    ecx,edx
  245.         rep    movsd
  246.     @next:    pop    esi ecx
  247.         add    ebp,4
  248.         add    esi,sort_drawers*4
  249.         loop    pddd
  250.         ENDM
  251.         mov    eax,number_f
  252.         lea    esi,sumy_z[(eax*4)-2]
  253.         lea    edi,kolejno₧ì
  254.         mov    ecx,number_f
  255.         xor     eax,eax
  256.     @popo:    movsw         ;kolejno₧ì
  257.         sub    esi,6 ;miniæcie sumy zeta
  258.         loop    @popo
  259.         ret
  260. _sort        ENDP
  261.  
  262.                 ShFa    db 8
  263.                 ZDelta  dd 200
  264.                 d_x     dw 160
  265.                 d_y     dw 100
  266. persp PROC
  267.             movsx     ebx,word ptr [esi+4]       
  268.             add     ebx,ZDelta
  269.             movsx     eax,word ptr [esi]       
  270.             neg     eax
  271.             sal     eax,8
  272.             mov     edx,eax
  273.             sar     edx,31
  274.             idiv     ebx
  275.             add     ax,d_x
  276.         mov    word ptr [edi],ax
  277.             movsx     eax,word ptr [esi+2]
  278.             sal     eax,8
  279.             mov     edx,eax
  280.             sar     edx,31
  281.             idiv     ebx
  282.             add     ax,d_y
  283.         mov    word ptr [edi+2],ax
  284.             add    edi,4
  285.             add     esi,6
  286.             dec     cx
  287.             jnz     persp
  288.             ret
  289. persp ENDP
  290.  
  291. ; na wej₧ciu ESI - z bitmapå 32x32...
  292. generate32env    PROC
  293.         ; --- env32 --> env128
  294. ;        lea    esi,map32
  295.         lea    edi,bene
  296.         mov    ecx,32
  297.     @jac0:    push    ecx
  298.         mov    ecx,32
  299.     @jac1:    xor    eax,eax
  300.         mov    al,[esi]
  301.         mov    ah,al
  302.         mov    bx,ax
  303.         ror    eax,16
  304.         or    ax,bx
  305.         mov    [edi+000],eax
  306.         mov    [edi+128],eax
  307.         mov    [edi+256],eax
  308.         mov    [edi+384],eax
  309.         add    edi,4
  310.         inc    esi
  311.         loop    @jac1
  312.         add    edi,128*3
  313.         pop    ecx
  314.         loop    @jac0
  315.         mov    esi,offset bene
  316.         mov    edi,offset bene-128
  317.         mov    ecx,32
  318.         rep    movsd
  319.         mov    esi,offset bene+128*127
  320.         mov    edi,offset bene+128*128
  321.         mov    ecx,32
  322.         rep    movsd
  323.         ; ---
  324.         mov    ecx,ile_gene
  325.     @p12:    push    ecx
  326.         lea    esi,bene
  327.         mov    ecx,128*128
  328.     @p11:    movzx    ax,byte ptr [esi-1]
  329.         movzx    bx,byte ptr [esi+1]
  330.         add    ax,bx
  331.         movzx    bx,byte ptr [esi+127]
  332.         add    ax,bx
  333.         movzx    bx,byte ptr [esi-127]
  334.         add    ax,bx
  335.         shr    ax,2
  336.         mov    [esi],al
  337.         inc    esi
  338.         loop    @p11
  339.         pop    ecx
  340.         loop    @p12
  341.         ret
  342. generate32env    ENDP
  343.  
  344. ;
  345. ; [ CALC_NOR ] PROC
  346. ;
  347. ; U₧rednione wersory normalne - wynik zwracany do tablicy wersory !
  348. ; in :    adr_faces, adr_points, number_f, number_p
  349. ; out:  vertex normals in [WERSORY] table...
  350. ;
  351.         nnx1    dd    ?
  352.         nny1    dd    ?
  353.         nnz1    dd    ?
  354.         nnx2    dd    ?
  355.         nny2    dd    ?
  356.         nnz2    dd    ?
  357.         nnx3    dd    ?
  358.         nny3    dd    ?
  359.         nnz3    dd    ?
  360.         norX    dd    ?
  361.         norY    dd    ?
  362.         norZ    dd    ?
  363. calc_nor    PROC
  364.         mov    esi,adr_faces
  365.         lea    edi,nor_to_faces
  366.         mov    ecx,number_f
  367.     @cnv:    push    ecx
  368.         xor    ebx,ebx
  369.         mov    bx,word ptr [esi]
  370.         mov    eax,ebx
  371.         shl    eax,2
  372.         lea    ebp,[eax+ebx*2]
  373.         mov    edx,adr_pixels
  374.         movsx    eax,word ptr [edx+ebp]
  375.         mov    nnx1,eax
  376.         movsx    eax,word ptr [edx+ebp+2]
  377.         mov    nny1,eax
  378.         movsx    eax,word ptr [edx+ebp+4]
  379.         mov    nnz1,eax
  380.         mov    bx,word ptr [esi+2]    ;nexte pointe fejse
  381.         mov    eax,ebx
  382.         shl    eax,2
  383.         lea    ebp,[eax+ebx*2]
  384.         movsx    eax,word ptr [edx+ebp]
  385.         mov    nnx2,eax
  386.         movsx    eax,word ptr [edx+ebp+2]
  387.         mov    nny2,eax
  388.         movsx    eax,word ptr [edx+ebp+4]
  389.         mov    nnz2,eax
  390.         mov    bx,word ptr [esi+4]    ;bozon shading?
  391.         mov    eax,ebx
  392.         shl    eax,2
  393.         lea    ebp,[eax+ebx*2]
  394.         movsx    eax,word ptr [edx+ebp]
  395.         mov    nnx3,eax
  396.         movsx    eax,word ptr [edx+ebp+2]
  397.         mov    nny3,eax
  398.         movsx    eax,word ptr [edx+ebp+4]
  399.         mov    nnz3,eax
  400.         mov    eax,nny2
  401.         sub    eax,nny1
  402.         mov    ebp,nnz3
  403.         sub    ebp,nnz1
  404.         imul    ebp
  405.         mov    ebx,eax    ;(y2-y1)(z3-z1)
  406.         mov    eax,nny3
  407.         sub    eax,nny1
  408.         mov    ebp,nnz2
  409.         sub    ebp,nnz1        
  410.         imul    ebp    ;(y3-y1)(z2-z1)
  411.         sub    ebx,eax    
  412.         neg    ebx
  413.         mov    norX,ebx
  414.         mov    eax,nnx2
  415.         sub    eax,nnx1
  416.         mov    ebp,nnz3
  417.         sub    ebp,nnz1
  418.         imul    ebp
  419.         mov    ebx,eax    ;(x2-x1)(z3-z1)
  420.         mov    eax,nnx3
  421.         sub    eax,nnx1
  422.         mov    ebp,nnz2
  423.         sub    ebp,nnz1        
  424.         imul    ebp    ;(x3-x1)(z2-z1)
  425.         sub    ebx,eax    
  426.         mov    norY,ebx
  427.         mov    eax,nny2
  428.         sub    eax,nny1
  429.         mov    ebp,nnx3
  430.         sub    ebp,nnx1
  431.         imul    ebp
  432.         mov    ebx,eax    ;(y2-y1)(x3-x1)
  433.         mov    eax,nny3
  434.         sub    eax,nny1
  435.         mov    ebp,nnx2
  436.         sub    ebp,nnx1        
  437.         imul    ebp    ;(y3-y1)(x2-x1)
  438.         sub    ebx,eax    
  439.         neg    ebx
  440.         mov    norZ,ebx
  441.     ; dÆugo₧ì wektora normalnego!
  442.         mov    eax,norX
  443.         mov    ebx,norY
  444.         mov    ecx,norZ
  445.         imul    eax,eax
  446.         imul    ebx,ebx
  447.         imul    ecx,ecx
  448.         add    ecx,eax
  449.         add    ecx,ebx
  450.         call    _sqrt
  451.         shr    eax,8
  452.         mov    ebx,eax    ;pierwiastek
  453.         or    ebx,ebx
  454.         jnz    @norm
  455.         mov    word ptr [edi],0
  456.         mov    word ptr [edi+2],0
  457.         mov    word ptr [edi+4],0
  458.         jmp    ponor
  459.     @norm:    
  460.     ; normalizacja do 255..
  461.         mov    eax,norX
  462.         cdq
  463.         shld    eax,edx,8
  464.         idiv    ebx
  465.         mov    word ptr [edi],ax
  466.         mov    eax,norY
  467.         cdq
  468.         shld    eax,edx,8
  469.         idiv    ebx
  470.         mov    word ptr [edi+2],ax
  471.         mov    eax,norZ
  472.         cdq
  473.         shld    eax,edx,8
  474.         idiv    ebx
  475.         mov    word ptr [edi+4],ax
  476.     ponor:
  477.         add    edi,6
  478.         add    esi,6
  479.         pop    ecx
  480.         loop    @cnv
  481.     ; no to bierzemy siæ za u₧rednione wersory normalne...
  482.     ; dodajæ wsp.kaºdego wyståpienia wierzch. i dzielæ przez
  483.     ; ilo₧ì wyståpieñ...
  484.         lea    edi,ilo₧ì_wer
  485.         xor    eax,eax
  486.         mov    ecx,number_p
  487.         rep    stosd
  488.         lea    edi,wersory
  489.         mov    ecx,number_p
  490.         lea    ecx,[ecx*2+ecx]
  491.         rep    stosw
  492.  
  493.         mov    ecx,number_f
  494.         mov    esi,adr_faces
  495.         lea    ebp,nor_to_faces
  496.     @u₧r:    xor    ebx,ebx
  497.         mov    bx, word ptr [esi]
  498.         mov    eax,ebx
  499.         shl    eax,2
  500.         inc    dword ptr [offset ilo₧ì_wer+eax]
  501.         lea    ebx,[ebx*2+eax]
  502.         mov    ax,word ptr [ebp]
  503.         add    word ptr [offset wersory+ebx],ax
  504.         mov    ax,word ptr [ebp+2]
  505.         add    word ptr [offset wersory+ebx+2],ax
  506.         mov    ax,word ptr [ebp+4]
  507.         add    word ptr [offset wersory+ebx+4],ax
  508.         mov    bx, word ptr [esi+2]
  509.         mov    eax,ebx
  510.         shl    eax,2
  511.         inc    dword ptr [offset ilo₧ì_wer+eax]
  512.         lea    ebx,[ebx*2+eax]
  513.         mov    ax,word ptr [ebp]
  514.         add    word ptr [offset wersory+ebx],ax
  515.         mov    ax,word ptr [ebp+2]
  516.         add    word ptr [offset wersory+ebx+2],ax
  517.         mov    ax,word ptr [ebp+4]
  518.         add    word ptr [offset wersory+ebx+4],ax
  519.         mov    bx, word ptr [esi+4]
  520.         mov    eax,ebx
  521.         shl    eax,2
  522.         inc    dword ptr [offset ilo₧ì_wer+eax]
  523.         lea    ebx,[ebx*2+eax]
  524.         mov    ax,word ptr [ebp]
  525.         add    word ptr [offset wersory+ebx],ax
  526.         mov    ax,word ptr [ebp+2]
  527.         add    word ptr [offset wersory+ebx+2],ax
  528.         mov    ax,word ptr [ebp+4]
  529.         add    word ptr [offset wersory+ebx+4],ax
  530.         add    ebp,6
  531.         add    esi,6
  532.         loop    @u₧r
  533.         lea    esi,wersory
  534.         lea    ebp,ilo₧ì_wer
  535.         mov    ecx,number_f
  536.     @u₧v:    
  537.         mov    ebx,[ebp]
  538.         or    ebx,ebx
  539.         jnz    lu₧
  540.         mov    word ptr [esi],0
  541.         mov    word ptr [esi+2],0
  542.         mov    word ptr [esi+4],0    
  543.         jmp    polu₧
  544.     lu₧:
  545.         movsx    eax,word ptr [esi]
  546.         cdq
  547.         idiv    ebx
  548.         mov    word ptr [esi],ax
  549.         movsx    eax,word ptr [esi+2]
  550.         cdq
  551.         idiv    ebx
  552.         mov    word ptr [esi+2],ax
  553.         movsx    eax,word ptr [esi+4]
  554.         cdq
  555.         idiv    ebx
  556.         mov    word ptr [esi+4],ax
  557.     polu₧:
  558.         add    ebp,4
  559.         add    esi,6
  560.         loop    @u₧v
  561.         ret
  562. calc_nor    ENDP
  563.  
  564. ;
  565. ; [ _sqrt ] - pierwastek low precision ... comes from birthday intro!
  566. ;
  567. _sqrt        PROC
  568.         xor     eax,eax
  569.         mov     ebx,40000000h
  570.       sqrtLP1:
  571.         mov     edx,ecx         
  572.         sub     edx,ebx         
  573.         jl      sqrtLP2
  574.         sub     edx,eax         
  575.         jl      sqrtLP2
  576.         mov     ecx,edx         
  577.         shr     eax,1           
  578.         or      eax,ebx         
  579.         shr     ebx,2           
  580.         jnz     sqrtLP1
  581.         shl     eax,8
  582.         ret
  583.       sqrtLP2:    
  584.         shr     eax,1           
  585.         shr     ebx,2           
  586.         jnz     sqrtLP1
  587.         shl     eax,8
  588.         ret
  589. _sqrt        ENDP
  590.  
  591. ;
  592. ; [ _MAKE_LIGHT ] - dyz proccy is making light...
  593. ;            Sun is on de sky (not moved)....
  594. ;
  595. make_light    PROC
  596.         lea    edi,light
  597.         mov    esi,adr_versor
  598.         mov    ecx,number_p
  599.         shl    ecx,16
  600.         neg    ecx
  601.     @swia:    push    ecx
  602.         movsx    eax,word ptr [esi]
  603.         movsx    ebx,word ptr [esi+2]
  604.         movsx    ecx,word ptr [esi+4]
  605.         imul    eax,eax
  606.         imul    ebx,ebx
  607.         imul    ecx,ecx
  608.         add    ecx,eax
  609.         add    ecx,ebx
  610.         call    _sqrt
  611.         shr    eax,8
  612.         mov    ebp,eax
  613.         or    ebp,ebp
  614.         jz    @lik2
  615.         movsx    eax,word ptr [esi+4]
  616.         sal    eax,6
  617.         cdq
  618.         idiv    ebp
  619.         cdq
  620.         xor    eax,edx
  621.         sub    eax,edx
  622.         cmp    eax,63
  623.         jb    @lik
  624.         mov    eax,62
  625.     @lik:    inc    al
  626.         mov    byte ptr [edi],al
  627.         inc    edi
  628.         add    esi,6
  629.         pop    ecx
  630.         add    ecx,010000h
  631.         js    @swia
  632.         ret
  633.     @lik2:    mov    byte ptr [edi],1
  634.         inc    edi
  635.         add    esi,6
  636.         pop    ecx
  637.         add    ecx,010000h
  638.         js    @swia
  639.         ret
  640. make_light    ENDP
  641.  
  642. IFDEF gouraudIs
  643. ;
  644. ; [ DRAWfACESv ] - dyz shitty procedure draws my objects...
  645. ;
  646. drawFacesV    PROC
  647.         lea    esi,kolejno₧ì
  648.         mov    edi,adr_faces
  649.         lea    ebp,poin2d
  650.         mov    ecx,number_f
  651.     dfLoop:    push    esi edi ecx ebp
  652.         xor    eax,eax
  653.         mov    ax,word ptr [esi]
  654.         mov    ebx,eax
  655.         shl    ebx,2
  656.         lea    eax,[ebx+eax*2]
  657.         mov    bx,word ptr [edi+eax]
  658.         mov    dl,byte    ptr [offset light+ebx]
  659.         mov    gou_c1,dl
  660.         shl    ebx,2
  661.         movsx    edx,word ptr [ebp+ebx]
  662.         mov    gou_x1,edx
  663.         mov    vx1,dx
  664.         movsx    edx,word ptr [ebp+ebx+2]
  665.         mov    gou_y1,edx
  666.         mov    vy1,dx
  667.         mov    bx,word ptr [edi+eax+2]
  668.         mov    dl,byte    ptr [offset light+ebx]
  669.         mov    gou_c2,dl
  670.         shl    ebx,2
  671.         movsx    edx,word ptr [ebp+ebx]
  672.         mov    gou_x2,edx
  673.         mov    vx2,dx
  674.         movsx    edx,word ptr [ebp+ebx+2]
  675.         mov    gou_y2,edx
  676.         mov    vy2,dx
  677.         mov    bx,word ptr [edi+eax+4]
  678.         mov    dl,byte    ptr [offset light+ebx]
  679.         mov    gou_c3,dl
  680.         shl    ebx,2
  681.         movsx    edx,word ptr [ebp+ebx]
  682.         mov    gou_x3,edx
  683.         mov    vx3,dx
  684.         movsx    edx,word ptr [ebp+ebx+2]
  685.         mov    gou_y3,edx
  686.         mov    vy3,dx
  687.         call    isVisible
  688.         mov    al,visible
  689.         or    al,al
  690.         jnz    nous
  691.         call    gouraud
  692.     nous:    pop    ebp ecx edi esi
  693.         add    esi,2
  694.         loop    dfLoop
  695.         ret
  696. drawFacesV    ENDP
  697.  
  698. ; draw faces with colors and checking visible it...
  699. drawFacesVC    PROC
  700.         lea    esi,kolejno₧ì
  701.         mov    edi,adr_faces
  702.         lea    ebp,poin2d
  703.         mov    ecx,number_f
  704.     @dfLoop:push    esi edi ecx ebp
  705.         xor    eax,eax
  706.         mov    ax,word ptr [esi]
  707.     mov    edx,adr_colors
  708.     mov    dl ,byte ptr [edx+eax]
  709.     mov    ccccc,dl
  710.         mov    ebx,eax
  711.         shl    ebx,2
  712.         lea    eax,[ebx+eax*2]
  713.         mov    bx,word ptr [edi+eax]
  714.         mov    dl,byte    ptr [offset light+ebx]
  715.     add     dl,ccccc
  716.         mov    gou_c1,dl
  717.         shl    ebx,2
  718.         movsx    edx,word ptr [ebp+ebx]
  719.         mov    gou_x1,edx
  720.         mov    vx1,dx
  721.         movsx    edx,word ptr [ebp+ebx+2]
  722.         mov    gou_y1,edx
  723.         mov    vy1,dx
  724.         mov    bx,word ptr [edi+eax+2]
  725.         mov    dl,byte    ptr [offset light+ebx]
  726.     add     dl,ccccc
  727.         mov    gou_c2,dl
  728.         shl    ebx,2
  729.         movsx    edx,word ptr [ebp+ebx]
  730.         mov    gou_x2,edx
  731.         mov    vx2,dx
  732.         movsx    edx,word ptr [ebp+ebx+2]
  733.         mov    gou_y2,edx
  734.         mov    vy2,dx
  735.         mov    bx,word ptr [edi+eax+4]
  736.         mov    dl,byte    ptr [offset light+ebx]
  737.     add    dl,ccccc
  738.         mov    gou_c3,dl
  739.         shl    ebx,2
  740.         movsx    edx,word ptr [ebp+ebx]
  741.         mov    gou_x3,edx
  742.         mov    vx3,dx
  743.         movsx    edx,word ptr [ebp+ebx+2]
  744.         mov    gou_y3,edx
  745.         mov    vy3,dx
  746.         call    isVisible
  747.         mov    al,visible
  748.         or    al,al
  749.         jnz    @nous
  750.         call    gouraud
  751.     @nous:    pop    ebp ecx edi esi
  752.         add    esi,2
  753.         loop    @dfLoop
  754.         ret
  755.     ccccc    db     0
  756. drawFacesVC    ENDP
  757.     ENDIF
  758.  
  759. ;
  760. ; [ isVisible ] - is my poly visible???
  761. ;
  762.                 vx1        dw 0
  763.                 vy1     dw 0
  764.                 vz1     dw 0
  765.                 vx2     dw 0
  766.                 vy2     dw 0
  767.                 vz2     dw 0
  768.                 vx3     dw 0
  769.                 vy3     dw 0
  770.                 vz3     dw 0
  771.                 visible db 0
  772. isVisible PROC
  773.               mov    visible,0
  774.               mov     ax,vY2
  775.               sub     ax,vY1
  776.               mov     bx,vX3
  777.               sub     bx,vX1
  778.               imul     bx
  779.               mov     cx,ax
  780.               mov     ax,vY3
  781.               sub     ax,vY1
  782.               mov     bx,vX2
  783.               sub     bx,vX1
  784.               imul     bx
  785.               sub     cx,ax
  786.               neg     cx
  787.               js     noVis
  788.               mov     visible,1
  789.       noVis:     ret
  790. isVisible ENDP
  791.  
  792. copyPoints    PROC
  793.         mov    esi,adr_pixels
  794.         mov    edi,adr_points
  795.         mov    ecx,number_p
  796.         lea    ecx,[ecx*2+ecx]
  797.         push    ecx
  798.         rep    movsw
  799.         lea    esi,wersory
  800.         lea    edi,versory
  801.         pop    ecx
  802.         rep    movsw
  803.         ret
  804. copyPoints    ENDP
  805.  
  806. rotatety    PROC
  807.         mov    esi,adr_points
  808.         mov    ecx,number_p
  809.         call    _rotatem
  810.         neg    angleX
  811.         neg    angleY
  812.         neg    angleZ
  813.         lea    esi,versory
  814.         mov    ecx,number_p
  815.         call    _rotatem
  816.         neg    angleX
  817.         neg    angleY
  818.         neg    angleZ
  819.         mov    eax,inc_xxx
  820.         add    angleX,eax
  821.         mov    eax,inc_yyy
  822.         add    angleY,eax
  823.         mov    eax,inc_zzz
  824.         add    angleZ,eax
  825.         ret
  826. rotatety    ENDP
  827.  
  828. rotatety2    PROC
  829.         mov    esi,adr_points
  830.         mov    ecx,number_p
  831.         call    _rotatem
  832.         ret
  833. rotatety2    ENDP
  834.  
  835. ; ------------------------------------------- GOURAUD feee
  836. IFDEF gouraudIs
  837. gouraud         PROC
  838.         mov    ebx,gou_y1
  839.         mov    esi,gou_y2
  840.         mov    edi,gou_y3
  841.         mov    cx,word ptr [gou_c1]
  842.         mov    dl,byte ptr [gou_c3]
  843.         cmp    ebx,esi                ; y1 with y2
  844.         jl    gs_1ok1
  845.         xchg    ebx,esi
  846.         mov    eax,dword ptr [offset gou_x1]    ; x1
  847.         xchg    eax,dword ptr [offset gou_x1+8]    ; exchange x2
  848.         mov    dword ptr [offset gou_x1],eax    
  849.         xchg    cl,ch
  850.     gs_1ok1:    
  851.         cmp    ebx,edi
  852.         jl    gs_2ok
  853.         xchg    ebx,edi
  854.         mov    eax,dword ptr [offset gou_x1]
  855.         xchg    eax,dword ptr [offset gou_x1+16]
  856.         mov    dword ptr [offset gou_x1],eax
  857.         xchg    cl,dl
  858.     gs_2ok:
  859.         cmp    esi,edi
  860.         jl    gs_3ok
  861.         xchg    esi,edi
  862.         mov    eax,dword ptr [offset gou_x1+8]
  863.         xchg    eax,dword ptr [offset gou_x1+16]
  864.         mov    dword ptr [offset gou_x1+8],eax
  865.         xchg    ch,dl
  866.     gs_3ok:
  867.         cmp    ebx,clipDown
  868.         jg    endgou            ; when y1>dolnego zakresu
  869.         cmp    edi,clipUp
  870.         jl    endgou            ; when y3<górnego 0-zakresu
  871.         
  872.         cmp    ebx,edi
  873.         je    flat_line
  874.  
  875.         mov    dword ptr [offset gou_x1+4] ,ebx
  876.         mov    dword ptr [offset gou_x1+12],esi
  877.         mov    dword ptr [offset gou_x1+20],edi
  878.         mov    word  ptr [offset gou_c1],cx
  879.         mov    byte  ptr [offset gou_c1+2],dl
  880.  
  881.         mov    ebx,dword ptr [offset gou_y2]
  882.         sub    ebx,dword ptr [offset gou_y1]
  883.         jnz    dXX1
  884.         mov    delta1,0
  885.         mov    dC1,0
  886.         jmp    boFla1
  887.     dXX1:    mov    eax,dword ptr [offset gou_x2]
  888.         sub    eax,dword ptr [offset gou_x1]
  889.         jnz    nDech1
  890.         xor    eax,eax        ; wiæc po co dzieliì...
  891.         jmp    decha1
  892.     nDech1:    sal    eax,16
  893.         cdq
  894.         idiv    ebx
  895.     decha1:    mov    delta1,eax
  896.         movzx    eax,byte ptr [offset gou_c2]
  897.         movzx    ecx,byte ptr [offset gou_c1]
  898.         sub    eax,ecx
  899.         jnz    milky1        
  900.         xor    eax,eax        ; dC1=eax/Y gdzie eax=0 so...
  901.         jmp    mle1
  902.     milky1:    sal    eax,16
  903.         cdq
  904.         idiv    ebx
  905.     mle1:    mov    dC1,eax
  906.     boFla1:
  907.         ; nastæpny - i hope it runs...
  908.         mov    ebx,dword ptr [offset gou_y3]
  909.         sub    ebx,dword ptr [offset gou_y2]
  910.         jnz    dXX2
  911.         mov    delta2,0
  912.         mov    dC2,0
  913.         jmp    boFla2
  914.     dXX2:    mov    eax,dword ptr [offset gou_x3]
  915.         sub    eax,dword ptr [offset gou_x2]
  916.         jnz    nDech2
  917.         xor    eax,eax        ; wiæc po co dzieliì...
  918.         jmp    decha2
  919.     nDech2:    sal    eax,16
  920.         cdq
  921.         idiv    ebx
  922.     decha2:    mov    delta2,eax
  923.         movzx    eax,byte ptr [offset gou_c3]
  924.         movzx    ecx,byte ptr [offset gou_c2]
  925.         sub    eax,ecx
  926.         jnz    milky2        
  927.         xor    eax,eax        ; dC1=eax/Y gdzie eax=0 so...
  928.         jmp    mle2
  929.     milky2:    sal    eax,16        ; chyba kobiety mi siæ chce...
  930.         cdq
  931.         idiv    ebx
  932.     mle2:    mov    dC2,eax
  933.     boFla2:
  934.         mov    ebx,dword ptr [offset gou_y3]
  935.         sub    ebx,dword ptr [offset gou_y1]
  936.         jnz    dXX3
  937.         mov    delta3,0
  938.         mov    dC3,0
  939.         jmp    boFla3
  940.     dXX3:    mov    eax,dword ptr [offset gou_x3]
  941.         sub    eax,dword ptr [offset gou_x1]
  942.         jnz    nDech3
  943.         xor    eax,eax        ; wiæc po co dzieliì...
  944.         jmp    decha3
  945.     nDech3:    sal    eax,16
  946.         cdq
  947.         idiv    ebx
  948.     decha3:    mov    delta3,eax
  949.         movzx    eax,byte ptr [offset gou_c3]
  950.         movzx    ecx,byte ptr [offset gou_c1]
  951.         sub    eax,ecx
  952.         jnz    milky3        
  953.         xor    eax,eax        ; dC1=eax/Y gdzie eax=0 so...
  954.         jmp    mle3
  955.     milky3:    sal    eax,16        ; chyba kobiety mi siæ chce...
  956.         cdq
  957.         idiv    ebx
  958.     mle3:    mov    dC3,eax
  959.     boFla3:
  960.  
  961.         ; no to teras trzeba zrobiì pierwszy obieg...
  962.         ; i zobaczymy jak to wyjdzie...
  963.  
  964.         mov    eax,dword ptr [offset gou_x1]
  965.         sal    eax,16
  966.         mov    ebx,eax
  967.         movzx    ecx,byte ptr [offset gou_c1]
  968.         shl    ecx,16
  969.         mov    edx,ecx
  970.         mov    ebp,dword ptr [offset gou_y1]    ; a co?
  971.         mov    edi,draw_where
  972.     linG1:    
  973.         cmp    ebp,dword ptr [offset gou_Y2]
  974.         je    fuck2
  975.         cmp    ebp,clipUp
  976.         jl    nodr1
  977.         cmp    ebp,clipdown
  978.         jg    endgou
  979.         push    eax ebx ecx edx ebp edi
  980.         sar    eax,16
  981.         sar    ebx,16
  982.         sar    ecx,16
  983.         sar    edx,16
  984.         add    edi,dword ptr [offset a_ekr+ebp*4]
  985.         call    HorizGouraud
  986.         pop    edi ebp edx ecx ebx eax
  987.     noDr1:    add    eax,delta1
  988.         add    ebx,delta3
  989.         add    ecx,dC1
  990.         add    edx,dC3
  991.         inc    ebp
  992.         jmp    linG1
  993.     fuck2:
  994.         mov    eax,dword ptr [offset gou_x2]
  995.         sal    eax,16
  996.         movzx    ecx,byte ptr [offset gou_c2]
  997.         shl    ecx,16
  998.     linG2:    cmp    ebp,clipUp
  999.         jl    nodr2
  1000.         cmp    ebp,clipdown
  1001.         jg    endgou
  1002.         push    eax ebx ecx edx ebp edi
  1003.         sar    eax,16
  1004.         sar    ebx,16
  1005.         sar    ecx,16
  1006.         sar    edx,16
  1007.         add    edi,dword ptr [offset a_ekr+ebp*4]
  1008.         call    HorizGouraud
  1009.         pop    edi ebp edx ecx ebx eax
  1010.     noDr2:    add    eax,delta2
  1011.         add    ebx,delta3
  1012.         add    ecx,dC2
  1013.         add    edx,dC3
  1014.         inc    ebp
  1015.         cmp    ebp,dword ptr [offset gou_Y3]
  1016.         jle    linG2
  1017.     endgou:
  1018.         ret
  1019.  
  1020.     a_ekr:  t=0
  1021.         rept 200
  1022.             dd t
  1023.             t=t+320
  1024.         endm
  1025.  
  1026. flat_line:
  1027.         ;  here is flat gouraud line...    
  1028.         mov    edi,draw_where
  1029.         add    edi,[offset a_ekr+ebx*4]
  1030.         ;  and now i sort-x coordinates...
  1031.         mov    eax,dword ptr [offset gou_x1]
  1032.         mov    ebx,dword ptr [offset gou_x1+8]
  1033.         mov    esi,dword ptr [offset gou_x1+16]
  1034.         cmp    eax,ebx
  1035.         jl    gxs_1
  1036.         xchg    eax,ebx
  1037.         xchg    cl,ch
  1038.     gxs_1:    cmp    eax,esi
  1039.         jl    gxs_2
  1040.         xchg    eax,esi
  1041.         xchg    cl,dl
  1042.     gxs_2:    cmp    ebx,esi
  1043.         jl    gxs_3
  1044.         xchg    ebx,esi
  1045.         xchg    ch,dl
  1046.     gxs_3:    
  1047.         mov    ebx,esi            ; last x
  1048.         xchg    eax,ebx            ; eax=end ebx=start
  1049.         movzx    ecx,cl
  1050.         movzx    edx,dl
  1051.         xchg    ecx,edx
  1052.         call    HorizGouraud
  1053.         ret
  1054.  
  1055.         ; eax,ebx    = x1,x2
  1056.         ; edi        = offset linii
  1057.         ; ecx,edx    = c1,c2            BAD VERSION...
  1058. HorizGouraud:
  1059.         cmp    eax,ebx
  1060.         je    onlyPoint
  1061.         ; a to byì musi mimo wszystko...
  1062.         cmp    ebx,eax
  1063.         jl    HGok
  1064.         xchg    eax,ebx
  1065.         xchg    ecx,edx
  1066.     HGok:
  1067.         cmp    eax,clipleft    ; >
  1068.         jl    oPend
  1069.         cmp    ebx,clipright    ; <
  1070.         jg    oPend
  1071.         mov    esi,eax        ; end x
  1072.         push    ebx
  1073.         sub    eax,ebx        ; x2-x1
  1074.         shl    ecx,16        
  1075.         shl    edx,16
  1076.         mov    ebp,edx        ; start color
  1077.         sub    ecx,edx        ; c2-c1
  1078.         xchg    eax,ecx        ; bo dC/dX
  1079.         cdq
  1080.         idiv    ecx
  1081.         pop    ecx
  1082.         xchg    eax,ebp
  1083.     lopHG:
  1084.         cmp    ecx,clipleft
  1085.         jl    nHG
  1086.         cmp    ecx,clipright
  1087.         jg    nHG
  1088.         push    eax 
  1089.         shr    eax,16
  1090.         mov    byte ptr [edi+ecx],al
  1091.         pop    eax
  1092.     nHG:
  1093.         add    eax,ebp
  1094.         inc    ecx
  1095.         cmp    ecx,esi
  1096.         jle    lopHG
  1097.         ret
  1098.     onlyPoint:
  1099.         cmp    eax,ClipLeft
  1100.         jl    oPend
  1101.         cmp    eax,Clipright
  1102.         jg    oPend
  1103.         mov    byte ptr [edi+eax],cl
  1104.     oPend:
  1105.         ret
  1106. gouraud         ENDP
  1107. ENDIF    ; -------------------------------- END of it...
  1108.  
  1109.         left    dw 300 DUP (?,?,?,?)
  1110.         right    dw 300 DUP (?,?,?,?)
  1111.         add_col    db 0
  1112.  
  1113. text        PROC
  1114.  
  1115.         mov    adr_l,offset left
  1116.         mov    adr_r,offset right
  1117.  
  1118.         lea    esi,first_vertex
  1119.         lea    edi,second_vertex
  1120.         lea    ebp,third_vertex
  1121.  
  1122.         mov    eax,[esi+4] ;y1
  1123.         cmp    eax,[edi+4] ;y2
  1124.         jl    @s1
  1125.         xchg    esi,edi
  1126. @s1:        mov    eax,[esi+4] ;y1
  1127.         cmp    eax,[ebp+4] ;y3
  1128.         jl    @s2
  1129.         xchg    esi,ebp
  1130. @s2:        mov    eax,[edi+4] ;y2
  1131.         cmp    eax,[ebp+4] ;y3
  1132.         jl    @s3
  1133.         xchg    edi,ebp
  1134. @s3:
  1135.         mov    adr_1,esi
  1136.         mov    adr_2,edi
  1137.         mov    adr_3,ebp
  1138.  
  1139.         movsx    eax,word ptr [esi+6] ;y1
  1140.         movsx    ecx,word ptr [ebp+6] ;y3
  1141.  
  1142.         cmp    eax,clipd
  1143.         jg    @endt
  1144.         cmp    ecx,clipu
  1145.         jl    @endt
  1146.  
  1147.         sub    ecx,eax
  1148.         jz    @endt
  1149.         mov    h,ecx
  1150.  
  1151.         mov    eax,[ebp] ;X3    test side of in my poly
  1152.         sub    eax,[esi] ;X1
  1153.         mov    ebx,[ebp+4] ;Y3
  1154.         sub    ebx,[edi+4] ;Y2
  1155.         imul    ebx
  1156.         mov    ebx,[ebp+4] ;Y3
  1157.         sub    ebx,[esi+4] ;Y1
  1158.         idiv    ebx
  1159.         mov    ebx,[ebp]
  1160.         sub    ebx,eax
  1161.         cmp    ebx,dword ptr [edi] ;x2
  1162.         jg    @side_ok
  1163.  
  1164.         mov    adr_l,offset right
  1165.         mov    adr_r,offset left
  1166.  
  1167. @side_ok:
  1168.         mov    ebp,adr_l
  1169.  
  1170. ;LINE 1-2
  1171.         mov    ecx,[edi+4] ;y2
  1172.         sub    ecx,[esi+4] ;y1
  1173.         jz    @no12
  1174.         shr    ecx,16
  1175.         mov    eax,[edi] ;x2
  1176.         sub    eax,[esi] ;x1
  1177.         cdq
  1178.         idiv    ecx
  1179.         mov    dword ptr DX12,eax
  1180.  
  1181.         mov    eax,[edi+8] ;tx2
  1182.         sub    eax,[esi+8] ;tx1
  1183.         cdq
  1184.         idiv    ecx
  1185.         mov    dword ptr DTX12,eax
  1186.  
  1187.         mov    eax,[edi+12] ;ty2
  1188.         sub    eax,[esi+12] ;ty1
  1189.         cdq
  1190.         idiv    ecx
  1191.         mov    dword ptr DTY12,eax
  1192.  
  1193.         mov    eax,[esi]
  1194.         mov    ebx,[esi+8]
  1195.         mov    edx,[esi+12]
  1196. @lup12:
  1197.         add    eax,422011 ;dx
  1198.         DX12    =$-4
  1199.         add    ebx,422011 ;dtx
  1200.         DTX12    =$-4
  1201.         add    edx,422011
  1202.         DTY12    =$-4
  1203.         mov    [ebp+0],eax
  1204.         mov    [ebp+4],ebx
  1205.         mov    [ebp+8],edx
  1206.         add    ebp,16
  1207.         dec    ecx
  1208.         jnz    @lup12
  1209.  
  1210. @no12:
  1211.  
  1212. ;LINE 2-3
  1213.         mov    esi,adr_2
  1214.         mov    edi,adr_3
  1215.  
  1216.         mov    ecx,[edi+4] ;y3
  1217.         sub    ecx,[esi+4] ;y2
  1218.         jz    @no23
  1219.         shr    ecx,16
  1220.         mov    eax,[edi] ;x3
  1221.         sub    eax,[esi] ;x2
  1222.         cdq
  1223.         idiv    ecx
  1224.         mov    dword ptr DX23,eax
  1225.  
  1226.         mov    eax,[edi+8] ;tx3
  1227.         sub    eax,[esi+8] ;tx2
  1228.         cdq
  1229.         idiv    ecx
  1230.         mov    dword ptr DTX23,eax
  1231.     
  1232.         mov    eax,[edi+12] ;ty3
  1233.         sub    eax,[esi+12] ;ty2
  1234.         cdq
  1235.         idiv    ecx
  1236.         mov    dword ptr DTY23,eax
  1237.  
  1238.         mov    eax,[esi]
  1239.         mov    ebx,[esi+8]
  1240.         mov    edx,[esi+12]
  1241. @lup23:
  1242.         add    eax,422011 ;dx
  1243.         DX23    =$-4
  1244.         add    ebx,422011 ;dtx
  1245.         DTX23    =$-4
  1246.         add    edx,422011
  1247.         DTY23    =$-4
  1248.         mov    [ebp+0],eax
  1249.         mov    [ebp+4],ebx
  1250.         mov    [ebp+8],edx
  1251.         add    ebp,16
  1252.         dec    ecx
  1253.         jnz    @lup23
  1254.  
  1255. @no23:
  1256.  
  1257. ; LINE 1-3
  1258.         mov    ebp,adr_r
  1259.         mov    esi,adr_1
  1260.         mov    edi,adr_3
  1261.  
  1262.         mov    ecx,[edi+4] ;y3
  1263.         sub    ecx,[esi+4] ;y1
  1264.         jz    @no13
  1265.         shr    ecx,16
  1266.         mov    eax,[edi] ;x3
  1267.         sub    eax,[esi] ;x1
  1268.         cdq
  1269.         idiv    ecx
  1270.         mov    dword ptr DX13,eax
  1271.  
  1272.         mov    eax,[edi+8] ;tx3
  1273.         sub    eax,[esi+8] ;tx1
  1274.         cdq
  1275.         idiv    ecx
  1276.         mov    dword ptr DTX13,eax
  1277.  
  1278.         mov    eax,[edi+12] ;ty3
  1279.         sub    eax,[esi+12] ;ty1
  1280.         cdq
  1281.         idiv    ecx
  1282.         mov    dword ptr DTY13,eax
  1283.  
  1284.         mov    eax,[esi]
  1285.         mov    ebx,[esi+8]
  1286.         mov    edx,[esi+12]
  1287. @lup13:
  1288.         add    eax,422011 ;dx
  1289.         DX13    =$-4
  1290.         add    ebx,422011 ;dtx
  1291.         DTX13    =$-4
  1292.         add    edx,422011
  1293.         DTY13    =$-4
  1294.         mov    [ebp+0],eax
  1295.         mov    [ebp+4],ebx
  1296.         mov    [ebp+8],edx
  1297.         add    ebp,16
  1298.         dec    ecx
  1299.         jnz    @lup13
  1300.  
  1301. @no13:
  1302.         ; and the pætla rysujåca...
  1303.  
  1304.         movsx    eax,word ptr [esi+6] ;y1
  1305.         mov    edx,eax
  1306.         shl    edx,6
  1307.         shl    eax,8
  1308.         add    eax,edx
  1309.         mov    _liner,eax
  1310.  
  1311.         lea    esi,left
  1312.         lea    ebp,right
  1313.  
  1314. @scanline:
  1315.         mov    eax,_liner
  1316.  
  1317.         mov     EDI,draw_where
  1318.         ADD     EDI,EAX
  1319.  
  1320.         cmp    eax,clipuu    ;ykowa górna
  1321.         jl    @skip_diz_line
  1322.         cmp    eax,clipdd    ;ykowa dolna
  1323.         jg    @endt
  1324.         
  1325.         movsx    ecx,word ptr [ebp+2]    ;x2
  1326.         movsx    ebx,word ptr [esi+2]    ;x1
  1327.         cmp    ecx,clipl        ;x2 z lewå
  1328.         jl    @skip_diz_line         ;<to skip
  1329.         cmp    ebx,clipr 
  1330.         jg    @skip_diz_line     
  1331.         sub    ecx,ebx ;x2-x1
  1332.         js    @skip_diz_line
  1333.         inc    ecx
  1334.         mov    w,ecx
  1335.  
  1336.         mov    eax,[ebp+4] ;txR
  1337.         sub    eax,[esi+4] ;txL
  1338.         cdq
  1339.         idiv    ecx
  1340.         mov    dxxx1,eax
  1341.  
  1342.         mov    eax,[ebp+8] ;tyR
  1343.         sub    eax,[esi+8] ;tyL
  1344.         cdq
  1345.         idiv    ecx
  1346.         mov    dyyy1,eax
  1347.  
  1348.         movsx     ebx,word ptr [ebp+2] ;x2
  1349.         cmp     ebx,clipr
  1350.         jle     iopek
  1351.         sub    ebx,clipr
  1352.         sub     w,ebx
  1353. iopek:
  1354.         movsx    ecx,word ptr [esi+2] ;x1
  1355.         cmp    ecx,clipl
  1356.         jge    @nclip_left
  1357.  
  1358.         ;----clipleft
  1359.  
  1360.         neg    ecx ;jest <0
  1361.         sub     [w],ecx
  1362.         add    ecx,clipl ;staÆa two ticks
  1363.         
  1364.         mov    eax,dxxx1
  1365.         imul    ecx
  1366.         add    eax,[esi+4]
  1367.         push    eax
  1368.         mov    eax,dyyy1
  1369.         imul    ecx
  1370.         mov    ebx,eax
  1371.         add    ebx,[esi+8]
  1372.         pop    eax
  1373.         ;----
  1374.         jmp    @l000p
  1375.         
  1376. @nclip_left:
  1377.         mov    eax,[esi]
  1378.         shr    eax,16    
  1379.         add    edi,eax
  1380.  
  1381.         mov    eax,[esi+4]
  1382.         mov    ebx,[esi+8]
  1383. @l000p:
  1384.         add    eax,dxxx1
  1385.         add    ebx,dyyy1
  1386.         mov    edx,eax
  1387.         sar    edx,9
  1388.         and     edx,-128
  1389.         mov    ecx,ebx
  1390.         sar     ecx,16
  1391.         mov    al,[bene+edx+ecx]
  1392.         add    al,add_col
  1393.         mov    byte ptr [edi],al
  1394.         inc    edi
  1395.         dec    w
  1396.         jnz    @l000p
  1397.  
  1398. @skip_diz_line:
  1399.     
  1400.         add    ebp,16
  1401.         add    esi,16
  1402.         add    _liner,320
  1403.         dec    h
  1404.         jnz    @scanline
  1405.             
  1406. @endt:
  1407.         ret
  1408.  
  1409. text        ENDP
  1410. make_lightE    PROC
  1411.         mov    esi,adr_versor
  1412.         mov    ecx,number_p
  1413.         lea    edi,lightE
  1414. @mle:        mov    ax,[esi]
  1415.         sar    ax,2
  1416.         add    ax,64
  1417.         mov    [edi],ax
  1418.         mov    ax,[esi+2]
  1419.         sar    ax,2
  1420.         add    ax,64
  1421.         mov    [edi+2],ax
  1422.         add    edi,4
  1423.         add    esi,6
  1424.         loop    @mle
  1425.         ret
  1426. make_lightE    ENDP
  1427.  
  1428.  
  1429. ;
  1430. ; [ DRAWfACESv ] - dyz shitty procedure draws my objects...
  1431. ;
  1432. drawFacesVE    PROC
  1433.         mov    add_col,0
  1434.  
  1435.         lea    esi,kolejno₧ì
  1436.         mov    edi,adr_faces
  1437.         lea    ebp,poin2d
  1438.         mov    ecx,number_f
  1439.     dfL00p:    push    esi edi ecx ebp
  1440.  
  1441.         xor    eax,eax
  1442.         mov    ax,word ptr [esi] ;kolejno₧ì 
  1443.         lea     ebx,[eax*4]
  1444.         lea    eax,[ebx+eax*2] ;eax=eax*6
  1445.  
  1446.         mov    bx,word ptr [edi+eax] ;face
  1447.         mov    dx,[ebp+ebx*4] ;x1
  1448.         mov    [x1],dx
  1449.         mov    [vx1],dx ;and the same value...
  1450.         mov    dx,[ebp+ebx*4+2] ;y1
  1451.         mov    [y1],dx
  1452.         mov    [vy1],dx
  1453.         mov    dx,[lightE+ebx*4] ;xt1
  1454.         mov    [xt1],dx
  1455.         mov    dx,[lightE+ebx*4+2] ;yt1
  1456.         mov    [yt1],dx
  1457.         
  1458.         mov    bx,word ptr [edi+eax+2]
  1459.         mov    dx,[ebp+ebx*4]
  1460.         mov    [x2],dx
  1461.         mov    [vx2],dx
  1462.         mov    dx,[ebp+ebx*4+2]
  1463.         mov    [y2],dx
  1464.         mov    [vy2],dx
  1465.         mov    dx,[lightE+ebx*4] ;xt2
  1466.         mov    [xt2],dx
  1467.         mov    dx,[lightE+ebx*4+2] ;yt2
  1468.         mov    [yt2],dx
  1469.  
  1470.         mov    bx,word ptr [edi+eax+4]
  1471.         mov    dx,[ebp+ebx*4]
  1472.         mov    [x3],dx
  1473.         mov    [vx3],dx
  1474.         mov    dx,[ebp+ebx*4+2]
  1475.         mov    [y3],dx
  1476.         mov    [vy3],dx
  1477.         mov    dx,[lightE+ebx*4] ;xt3
  1478.         mov    [xt3],dx
  1479.         mov    dx,[lightE+ebx*4+2] ;yt3
  1480.         mov    [yt3],dx
  1481.  
  1482.         call    isVisible
  1483.         mov    al,visible
  1484.         or    al,al
  1485.         jnz    nouzz
  1486.  
  1487.         call    text
  1488.  
  1489.     nouzz:    pop    ebp ecx edi esi
  1490.         add    esi,2
  1491.         loop    dfL00p
  1492.         ret
  1493. drawFacesVE    ENDP
  1494.  
  1495. ;
  1496. ; [ DRAWfACESv ] - dyz shitty procedure draws my objects...
  1497. ;
  1498. drawFacesVCE    PROC
  1499.  
  1500.         lea    esi,kolejno₧ì
  1501.         mov    edi,adr_faces
  1502.         lea    ebp,poin2d
  1503.         mov    ecx,number_f
  1504.     dfL00p3:
  1505.         push    esi edi ecx ebp
  1506.  
  1507.         xor    eax,eax
  1508.         mov    ax,word ptr [esi] ;kolejno₧ì 
  1509.  
  1510.         mov    ebx,adr_colors        
  1511.         mov    dl,[ebx+eax]
  1512.         mov    add_col,dl
  1513.  
  1514.         lea     ebx,[eax*4]
  1515.         lea    eax,[ebx+eax*2] ;eax=eax*6
  1516.  
  1517.         mov    bx,word ptr [edi+eax] ;face
  1518.         mov    dx,[ebp+ebx*4] ;x1
  1519.         mov    [x1],dx
  1520.         mov    [vx1],dx ;and the same value...
  1521.         mov    dx,[ebp+ebx*4+2] ;y1
  1522.         mov    [y1],dx
  1523.         mov    [vy1],dx
  1524.         mov    dx,[lightE+ebx*4] ;xt1
  1525.         mov    [xt1],dx
  1526.         mov    dx,[lightE+ebx*4+2] ;yt1
  1527.         mov    [yt1],dx
  1528.         
  1529.         mov    bx,word ptr [edi+eax+2]
  1530.         mov    dx,[ebp+ebx*4]
  1531.         mov    [x2],dx
  1532.         mov    [vx2],dx
  1533.         mov    dx,[ebp+ebx*4+2]
  1534.         mov    [y2],dx
  1535.         mov    [vy2],dx
  1536.         mov    dx,[lightE+ebx*4] ;xt2
  1537.         mov    [xt2],dx
  1538.         mov    dx,[lightE+ebx*4+2] ;yt2
  1539.         mov    [yt2],dx
  1540.  
  1541.         mov    bx,word ptr [edi+eax+4]
  1542.         mov    dx,[ebp+ebx*4]
  1543.         mov    [x3],dx
  1544.         mov    [vx3],dx
  1545.         mov    dx,[ebp+ebx*4+2]
  1546.         mov    [y3],dx
  1547.         mov    [vy3],dx
  1548.         mov    dx,[lightE+ebx*4] ;xt3
  1549.         mov    [xt3],dx
  1550.         mov    dx,[lightE+ebx*4+2] ;yt3
  1551.         mov    [yt3],dx
  1552.  
  1553.         mov    al,widoczno₧ì
  1554.         or    al,al
  1555.         jnz    pipp
  1556.  
  1557.         call    isVisible
  1558.         mov    al,visible
  1559.         or    al,al
  1560.         jnz    nouzz3
  1561.  
  1562.     pipp:
  1563.  
  1564.         call    text
  1565.  
  1566.     nouzz3:    pop    ebp ecx edi esi
  1567.         add    esi,2
  1568.         loop    dfL00p3
  1569.         ret
  1570. drawFacesVCE    ENDP
  1571.  
  1572.  
  1573. CODE32        ENDS
  1574. END
  1575.